package cn.lili.modules.wallet.mapper;


import cn.lili.modules.payment.entity.dos.UserWallet;
import cn.lili.modules.payment.entity.dto.UserWalletUpdateDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Update;

/**
 * 用户钱包数据处理层
 *
 * @author pikachu
 * @since 2020-02-25 14:10:16
 */
public interface WalletMapper extends BaseMapper<UserWallet> {


    /**
     * 修改用户积分
     *
     * @param points 变动积分
     * @param userId 用户id
     */
    @Update("UPDATE li_user_wallet set points = points+#{points}, total_points = total_points+#{points} WHERE user_id = #{userId}")
    void addPoints(Double points, String userId);


    /**
     * 修改用户F分
     *
     * @param fmoney 变动积分
     * @param userId 用户id
     */
    @Update("UPDATE li_user_wallet set fmoney = fmoney+#{fmoney}, total_fmoney = total_fmoney+#{fmoney} WHERE user_id = #{userId}")
    void addFmoney(Double fmoney, String userId);


    /**
     * 扣减用户积分（用于扣减积分场景，如订单取消，赠送积分返还）
     *
     * @param points 变动积分
     * @param userId 用户id
     */
    @Update("UPDATE li_user_wallet set points = points-#{points}, total_points = total_points-#{points} WHERE user_id = #{userId}")
    void reducePoints(Double points, String userId);

    /**
     * 扣减用户F分（用于扣减积分场景，如订单取消，赠送积分返还）
     *
     * @param fmoney 变动积分
     * @param userId 用户id
     */
    @Update("UPDATE li_user_wallet set fmoney = fmoney-#{fmoney}, total_fmoney = total_fmoney-#{fmoney} WHERE user_id = #{userId}")
    void reduceFmoney(Double fmoney, String userId);


    /**
     * 增加用户余额，扣减冻结金额
     * 用于取消提现申请路径
     *
     * @param userId 用户id
     * @param money  金额
     */
    @Update("""
                UPDATE li_user_wallet set
                frozen_balance = frozen_balance-#{money},
                balance = balance+#{money}
                WHERE user_id = #{userId}
            """)
    void increaseWithdrawal(String userId, Double money);

    /**
     * 增加扣减余额，增加冻结金额
     * 申请提现场景
     *
     * @param userId 用户id
     * @param money  金额
     */
    @Update("""
                UPDATE li_user_wallet set
                frozen_balance = frozen_balance+#{money},
                balance = balance-#{money}
                WHERE user_id = #{userId}
            """)
    void reduceWithdrawal(String userId, Double money);

    /**
     * 增加扣减余额，增加冻结金额
     * 申请提现场景
     *
     * @param userId 用户id
     * @param money  金额
     */
    @Update("""
                UPDATE li_user_wallet set
                frozen_balance = frozen_balance-#{money}
                WHERE user_id = #{userId}
            """)
    void reduceFrozenBalance(String userId, Double money);

    /**
     * 充值余额
     *
     * @param userId 用户id
     * @param money  金额
     */
    @Update("""
                UPDATE li_user_wallet set
                balance = balance+#{money}
                WHERE user_id = #{userId}
            """)
    void recharge(String userId, Double money);

    /**
     * 扣减
     *
     * @param userId 用户id
     * @param money  金额
     */
    @Update("""
                UPDATE li_user_wallet set
                balance = balance-#{money}
                WHERE user_id = #{userId}
            """)
    void reduce(String userId, Double money);
}